1. Field of the Invention
The present invention relates generally to computer systems and more specifically to the control of system input/output processing by an application program.
2. Description of Related Art
A computer system typically includes one or more peripheral input/output (I/O) devices such as keyboards, printers, storage devices, and monitors, in addition to the central processing unit (CPU) and main memory. When an application program being executed by the CPU needs to interact with the I/O devices to receive input data or to send output data, the application program ordinarily requests operating system software to coordinate and control the I/O operation. Hence, the computer programmer developing the application program is shielded from the complexities of I/O processing for the various I/O devices of the computer system because the operating system software handles the low-level details. In addition, the operating system maintains a high level of security and protection of system memory during processing of I/O requests.
However, this approach often has a negative effect on system performance. When the operating system controls all I/O processing for the application program, several additional layers of software are executed for each I/O operation, which results in performance bottlenecks for many combinations of application programs, operating systems and I/O devices. FIG. 1 is a prior art diagram illustrating the multiple layers of software required for an application program to communicate with an I/O device. For example, an application program 10 needs to write data to or read data from I/O device 12. The application program calls operating system (OS) 14 procedures in file system software 16 to request the I/O operations. File system software 16 interacts with OS kernel 18 and I/O device driver software 20 to initiate and manage the I/O operation. In this architecture, context switches between multiple OS and application processes are required in order to effect the I/O transfer. When fast I/O performance is critical to the application program, the overhead resulting from the context switches and the inter-process transfer of data is problematic. When the prior art model is expanded for a clustered environment of multiple servers accessing many I/O platforms controlling I/O devices, the problem is made worse because of the additional inter-platform communication overhead. Overcoming these performance bottlenecks to improve system performance without imposing complex and burdensome requirements on the application program is desired.